{% extends "main.html" %} 
{% block styles %} 
{{ super() }}
<link rel="stylesheet" href="/assets/github-dark.min.css" />

<style>
    /* Hide TOC */
    @media screen and (min-width: 60em) {
        .md-sidebar--secondary {
            display: none;
        }
    }

    /* Hide navigation */
    @media screen and (min-width: 76.25em) {
        .md-sidebar--primary {
            display: none;
        }
    }
</style>
{% endblock %} 

{% block hero %}
<div class="tailwind">
<div class="relative isolate overflow-hidden pt-14">
    <div class="mx-auto max-w-3xl py-8 px-4">
        <div class="text-center">
            <h1 class="text-3xl font-bold tracking-tight text-black sm:text-4xl">
                Fast, Declarative, Reproducible and Composable Developer
                Environments using Nix
            </h1>
            <p class="mt-6 text-lg leading-8 text-gray-800">
                <a href="/basics" class="text-[#425C82] font-medium">Develop natively</a> •
                <a href="/containers" class="text-[#425C82] font-medium">Deploy containers</a> •
                <a href="/packages" class="text-[#425C82] font-medium">100,000+ packages</a> •
                <a href="/scripts" class="text-[#425C82] font-medium">Write scripts</a> and
                <a href="/tasks" class="text-[#425C82] font-medium">tasks</a> •
                <a href="/languages" class="text-[#425C82] font-medium">50+ languages</a> •
                <a href="/processes" class="text-[#425C82] font-medium">Define processes</a> •
                <a href="/services" class="text-[#425C82] font-medium">Reuse services</a> •
                <a href="/tests" class="text-[#425C82] font-medium">Run tests</a> •
                <a href="/git-hooks" class="text-[#425C82] font-medium">Enforce git hooks</a>
            </p>
            <form class="flex max-sm:flex-col gap-4 mt-10" id="generate" onsubmit="if (document.querySelector('#generate input').value.trim() === '') { alert('Please enter what to generate'); return false; } window.location.href='https://devenv.new/?q=' + encodeURIComponent(document.querySelector('#generate input').value); return false;">
                <input
                    type="text"
                    name="q"
                    class="w-full px-4 py-2 rounded-lg border border-gray-300 focus:outline-none focus:ring-2 focus:ring-[#425C82] focus:border-transparent text-base transition-all"
                    placeholder="Describe your environment..."
                />
                <button
                    type="submit"
                    class="w-full text-base px-6 py-2 sm:w-auto bg-[#425C82] text-white font-medium rounded-lg hover:bg-opacity-90 focus:outline-none focus:ring-2 focus:ring-[#425C82] focus:ring-offset-2 transition-colors"
                >
                    Generate
                </button>
            </form>

            <script>
                window.onload = function () {
                    const placeholders = [
                        "Rust with mydb in PostgreSQL",
                        "Python using uv and scikit-learn",
                        "Node.js with Redis backend",
                        "Go microservice with MySQL",
                        "Ruby on Rails with React frontend",
                        "Android and Flutter",
                    ];

                    const input = document.querySelector("#generate input");
                    let index = 0;
                    let typing = false;
                    let charIndex = 0;
                    let currentText = "";

                    let timer;
                    const startTyping = () => {
                        if (!typing) {
                            typing = true;
                            currentText = placeholders[index];
                            charIndex = 0;
                            index = (index + 1) % placeholders.length;
                        }

                        if (charIndex < currentText.length) {
                            input.setAttribute(
                                "placeholder",
                                currentText.substring(0, charIndex + 1),
                            );
                            charIndex++;
                            timer = setTimeout(startTyping, 50);
                        } else {
                            typing = false;
                            timer = setTimeout(startTyping, 800);
                        }
                    };
                    startTyping();
                };
            </script>
        </div>
    </div>
</div>

<div class="overflow-hidden bg-white py-14">
    <div class="mx-auto max-w-7xl md:px-6 lg:px-8">
        <div class="grid grid-cols-1 gap-x-8 gap-y-16 sm:gap-y-20 lg:grid-cols-2 lg:items-start">
            <div class="px-4">
                <div class="mx-auto max-w-2xl lg:mx-0 lg:max-w-lg">
                    <h2 class="text-3xl font-bold tracking-tight text-gray-900 sm:text-4xl">
                        Simple JSON-like language
                    </h2>
                    <p class="mt-6 text-lg leading-8 text-gray-600">
                        Declaratively define your development environment by
                        <a href="/basics/" class="text-[#425C82] font-semibold">toggling basic options</a>.
                    </p>

                    <dl class="mt-10 max-w-xl space-y-8 text-base leading-7 text-gray-600 lg:max-w-none">
                        <div class="relative lg:pl-3">
                            <dt class="block font-semibold text-gray-900">
                                Environment variables
                            </dt>
                            <dd class="inline">
                                Use <code class="bg-gray-100 p-1">env</code> attribute set to define environment variables.
                                <p class="mt-2">
                                    Include secrets from <code class="bg-gray-100 p-1">.env</code> file with 
                                    <code class="bg-gray-100 p-1">dotenv.enable = true;</code>.
                                </p>
                            </dd>
                        </div>
                        <div class="relative lg:pl-3">
                            <dt class="block font-semibold text-gray-900">
                                Packages
                            </dt>
                            <dd class="inline">
                                Pick from <strong>100,000+</strong> prebuilt packages for
                                <strong>Linux/macOS</strong> and
                                <strong>x64/ARM64</strong>. Works with
                                <strong>WSL2</strong>.
                            </dd>
                        </div>
                        <div class="relative lg:pl-3">
                            <dt class="block font-semibold text-gray-900">
                                Shell initialization
                            </dt>
                            <dd class="inline">
                                Run scripts when entering the environment with
                                <code class="bg-gray-100 p-1">enterShell</code>.
                            </dd>
                        </div>
                        <div class="relative lg:pl-3">
                            <dt class="block font-semibold text-gray-900">
                                Automatic activation
                            </dt>
                            <dd class="inline">
                                Using <code class="bg-gray-100 p-1">direnv</code> will
                                <a class="text-[#425C82] font-semibold" href="/automatic-shell-activation">
                                automatically load the environment</a> when you enter the project directory.
                            </dd>
                        </div>
                    </dl>
                </div>
            </div>
            <div class="px-4 lg:px-0">
                <div class="relative isolate overflow-hidden rounded-md sm:mx-auto sm:max-w-2xl lg:mx-0 lg:max-w-none">
                    <div class="mx-auto max-w-2xl sm:mx-0 sm:max-w-none">
                        <div class="overflow-hidden bg-gray-900">
                            <div class="flex bg-gray-800/40">
                                <div class="flex items-center text-sm font-medium leading-6 border-b border-r border-b-white/20 border-r-white/10 bg-white/5 h-8">
                                    <div class="px-4 text-gray-200">
                                        devenv.nix
                                    </div>
                                </div>
                            </div>
                            <pre class="text-white text-sm"><code class="language-nix">{ pkgs, config, ... }: {
  env.GREET = "determinism";

  packages = [
    pkgs.ncdu
  ];

  enterShell = ''
    echo hello ${config.env.GREET}
    ncdu --version
  '';
}
</code></pre>
                        </div>
                    </div>

                    <div class="overflow-hidden bg-gray-900 border-t border-t-white/20">
                        <pre class="text-white text-sm"><code class="language-shell" data-shell-prefix="$">devenv shell
hello determinism
ncdu 2.3
</code><code class="language-shell" data-shell-prefix="(devenv) $">
</code></pre>
                    </div>
                </div>
            </div>
        </div>
    </div>
</div>

<div class="overflow-hidden bg-white py-14">
    <div class="mx-auto max-w-7xl md:px-6 lg:px-8">
        <div class="grid grid-cols-1 gap-x-8 gap-y-16 sm:gap-y-20 lg:grid-cols-2 lg:items-start">
            <div class="px-4 lg:px-0 order-last lg:order-first">
                <div class="relative isolate overflow-hidden rounded-md sm:mx-auto sm:max-w-2xl lg:mx-0 lg:max-w-none">
                    <div class="mx-auto max-w-2xl sm:mx-0 sm:max-w-none">
                        <div class="overflow-hidden bg-gray-900">
                            <div class="flex bg-gray-800/40">
                                <div class="flex items-center text-sm font-medium leading-6 border-b border-r border-b-white/20 border-r-white/10 bg-white/5 h-8">
                                    <div class="px-4 text-gray-200">
                                        devenv.nix
                                    </div>
                                </div>
                            </div>
                            <pre class="text-white text-sm"><code class="language-nix">{ pkgs, ... }: {
  scripts.build = {
    exec = "yarn build";
    packages = [ pkgs.yarn ];
  };

  tasks."myapp:build" = {
    exec = "build";
    before = [ "devenv:enterShell" ];
  };

  # Runs on `git commit` and `devenv test`
  git-hooks.hooks = {
    black.enable = true;
    # Your custom hooks
    generate-css = {
      enable = true;
      name = "generate-css";
      entry = "build";
    };
  };
}
</code></pre>
                        </div>
                    </div>

                    <div class="overflow-hidden bg-gray-900 border-t border-t-white/20">
                        <pre class="text-white text-sm"><code class="language-shell" data-shell-prefix="$">devenv shell
...
Running tasks     devenv:enterShell
Succeeded         devenv:git-hooks:install 15ms
Succeeded         myapp:build               23ms
Succeeded         devenv:enterShell         23ms
3 Succeeded                                 50.14ms
$

</code></pre>
                    </div>
                </div>
            </div>

            <div class="px-4 order-first lg:order-last">
                <div class="mx-auto max-w-2xl lg:mx-0 lg:max-w-lg">
                    <h2 class="text-3xl font-bold tracking-tight text-gray-900 sm:text-4xl">
                        Scripts and Tasks
                    </h2>
                    <p class="mt-6 text-xl font-medium leading-8 text-gray-600">
                        Define
                        <a href="/scripts/" class="text-[#425C82] font-semibold">scripts</a>,
                        <a href="/tasks/" class="text-[#425C82] font-semibold">tasks</a>, and
                        <a href="/git-hooks/" class="text-[#425C82] font-semibold">git hooks</a>
                        to automate your development workflow.
                    </p>

                    <dl class="mt-10 max-w-xl space-y-8 text-base leading-7 text-gray-600 lg:max-w-none">
                        <div class="relative lg:pl-3">
                            <dt class="block font-semibold text-gray-900">
                                Scripts
                            </dt>
                            <dd class="inline">
                                Define scripts that can be invoked inside the
                                environment, with optional runtime packages that
                                are only available when the script runs.
                            </dd>
                        </div>
                        <div class="relative lg:pl-3">
                            <dt class="block font-semibold text-gray-900">
                                Tasks
                            </dt>
                            <dd class="inline">
                                Form dependencies between automation code,
                                executed in parallel and written in your
                                favorite language.
                            </dd>
                        </div>
                        <div class="relative lg:pl-3">
                            <dt class="block font-semibold text-gray-900">
                                Git hooks
                            </dt>
                            <dd class="inline">
                                Pick from builtin and language-specific linters
                                and formatters using
                                <a href="https://github.com/cachix/git-hooks.nix?tab=readme-ov-file#hooks" 
                                   class="text-[#425C82] font-semibold">git-hooks.nix</a>.
                            </dd>
                        </div>
                    </dl>
                </div>
            </div>
        </div>
    </div>
</div>

<div class="overflow-hidden bg-white py-14">
    <div class="mx-auto max-w-7xl md:px-6 lg:px-8">
        <div class="grid grid-cols-1 gap-x-8 gap-y-8 lg:items-start">
            <div class="px-4">
                <div class="mx-auto max-w-2xl lg:mx-0 lg:max-w-lg text-center">
                    <h2 class="text-3xl font-bold tracking-tight text-gray-900 sm:text-4xl">
                        Search packages and options
                    </h2>
                    <p class="mt-6 text-xl font-medium leading-8 text-gray-600">
                        Explore
                        <a href="/packages/" class="text-[#425C82] font-semibold">packages</a>
                        and
                        <a href="/reference/options/" class="text-[#425C82] font-semibold">options</a>
                        to customize your environment.
                    </p>
                </div>
            </div>

            <div class="px-4 lg:px-0">
                <div class="mt-4 relative isolate overflow-hidden rounded-md sm:mx-auto sm:max-w-2xl lg:mx-0 lg:max-w-none">
                    <div class="bg-gray-900">
                        <pre class="text-white text-sm"><code class="language-shell" data-shell-prefix="$">devenv search devenv
+--------------+---------------+------------------------------------------------------------------------+
| Package      | Version       | Description                                                            |
+--------------+---------------+------------------------------------------------------------------------+
| pkgs.devenv  | 1.0.3         | Fast, Declarative, Reproducible, and Composable Developer Environments |
+--------------+---------------+------------------------------------------------------------------------+
+--------------------------+---------+-----------+------------------------------------------------------------+
| Option                   | Type    | Default   | Description                                                |
+--------------------------+---------+-----------+------------------------------------------------------------+
| devenv.debug             | boolean | false     | Whether to enable debug mode of devenv enterShell script.  |
+--------------------------+---------+-----------+------------------------------------------------------------+
| devenv.warnOnNewVersion  | boolean | true      | Whether to warn when a new version of devenv is available. |
+--------------------------+---------+-----------+------------------------------------------------------------+
| devenv.latestVersion     | string  | "1.0.3"   | The latest version of devenv.                              |
+--------------------------+---------+-----------+------------------------------------------------------------+
• Found 1 package and 3 options for 'devenv'.
</code></pre>
                    </div>
                </div>
            </div>
        </div>
    </div>
</div>

<div class="overflow-hidden bg-white py-14">
    <div class="mx-auto max-w-7xl md:px-6 lg:px-8">
        <div class="grid grid-cols-1 gap-x-8 gap-y-16 sm:gap-y-20 lg:grid-cols-2 lg:items-start">
            <div class="px-4">
                <div class="mx-auto max-w-2xl lg:mx-0 lg:max-w-lg">
                    <h2 class="text-3xl font-bold tracking-tight text-gray-900 sm:text-4xl">
                        Languages
                    </h2>
                    <p class="mt-6 text-xl font-medium leading-8 text-gray-600">
                        Supports over 50
                        <a href="/languages/" class="text-[#425C82] font-semibold">programming languages</a>.
                    </p>

                    <dl class="mt-10 max-w-xl space-y-8 text-base leading-7 text-gray-600 lg:max-w-none">
                        <div class="relative lg:pl-3">
                            <dt class="block font-semibold text-gray-900">
                                Packed with tooling
                            </dt>
                            <dd class="inline">
                                Comes with commonly used tooling for each
                                language including LSP servers, formatters,
                                linters, and compilers.
                            </dd>
                        </div>
                        <div class="relative lg:pl-3">
                            <dt class="block font-semibold text-gray-900">
                                Version support
                            </dt>
                            <dd class="inline">
                                Languages like Python, Terraform, Rust, PHP, and
                                Ruby all have version support.
                            </dd>
                        </div>
                        <div class="relative lg:pl-3">
                            <dt class="block font-semibold text-gray-900">
                                Examples
                            </dt>
                            <dd class="inline">
                                Check out the
                                <a class="text-[#425C82] font-semibold"
                                   href="https://github.com/cachix/devenv/tree/main/examples">examples collection</a>
                                to get started.
                            </dd>
                        </div>
                    </dl>
                </div>
            </div>
            <div class="px-4 lg:px-0">
                <div class="relative isolate overflow-hidden rounded-md sm:mx-auto sm:max-w-2xl lg:mx-0 lg:max-w-none">
                    <div class="mx-auto max-w-2xl sm:mx-0 sm:max-w-none">
                        <div class="overflow-hidden rounded-b-xl bg-gray-900">
                            <div class="flex bg-gray-800/40">
                                <div class="flex items-center text-sm font-medium leading-6 border-b border-r border-b-white/20 border-r-white/10 bg-white/5 h-8">
                                    <div class="px-4 text-gray-200">
                                        devenv.nix
                                    </div>
                                </div>
                            </div>
                            <pre class="text-white text-sm"><code class="language-nix">{ pkgs, config, ... }: {
  languages.python = {
    enable = true;
    version = "3.11";
    venv.enable = true;
    venv.requirements = ''
      requests
      torch
    '';
    uv.enable = true;
  };

  languages.rust = {
    enable = true;
    channel = "nightly";
    rustflags = "-Z threads=8";
    targets = [ "wasm32-unknown-unknown" ];
  };

  languages.php = {
    enable = true;
    version = "8.1";
    ini = ''
      memory_limit = 256M
    '';
    fpm.pools.web = {
      settings = {
        "pm" = "dynamic";
      };
    };
  };
}
</code></pre>
                        </div>
                    </div>
                </div>
            </div>
        </div>
    </div>
</div>


<div class="overflow-hidden bg-white py-14">
    <div class="mx-auto max-w-7xl md:px-6 lg:px-8">
        <div class="grid grid-cols-1 gap-x-8 gap-y-16 sm:gap-y-20 lg:grid-cols-2 lg:items-start">
            <div class="px-4 lg:px-0 order-last lg:order-first">
                <div class="relative isolate overflow-hidden rounded-md sm:mx-auto sm:max-w-2xl lg:mx-0 lg:max-w-none">
                    <div class="mx-auto max-w-2xl sm:mx-0 sm:max-w-none">
                        <div class="overflow-hidden bg-gray-900">
                            <div class="flex bg-gray-800/40">
                                <div class="flex items-center text-sm font-medium leading-6 border-b border-r border-b-white/20 border-r-white/10 bg-white/5 h-8">
                                    <div class="px-4 text-gray-200">
                                        devenv.nix
                                    </div>
                                </div>
                            </div>
                            <pre class="text-white text-sm"><code class="language-nix">{ pkgs, ... }: {
  packages = [
    pkgs.cargo-watch
  ];

  processes = {
    cargo-watch.exec = "cargo watch -x run";
  };
}
</code></pre>
                        </div>
                    </div>

                    <div class="overflow-hidden bg-gray-900 border-t border-t-white/20">
                        <pre class="text-white text-sm"><code class="language-shell" data-shell-prefix="$">devenv up
• Building processes ...
• Starting processes ...
...

</code></pre>
                    </div>
                </div>
            </div>

            <div class="px-4 order-first lg:order-last">
                <div class="mx-auto max-w-2xl lg:mx-0 lg:max-w-lg">
                    <h2 class="text-3xl font-bold tracking-tight text-gray-900 sm:text-4xl">
                        Run processes
                    </h2>
                    <p class="mt-6 text-xl font-medium leading-8 text-gray-600">
                        Define your
                        <a class="text-[#425C82] font-semibold" href="/processes/">processes declaratively</a>
                        and start them with
                        <code class="bg-gray-100 p-1">devenv up</code>.
                    </p>

                    <dl class="mt-10 max-w-xl space-y-8 text-base leading-7 text-gray-600 lg:max-w-none">
                        <div class="relative lg:pl-3">
                            <dt class="block font-semibold text-gray-900">
                                Declarative processes
                            </dt>
                            <dd class="inline">
                                Inspired by <code class="bg-gray-100 p-1">Procfile</code>,
                                define development processes that have access
                                to your environment.
                            </dd>
                        </div>
                        <div class="relative lg:pl-3">
                            <dt class="block font-semibold text-gray-900">
                                Process management
                            </dt>
                            <dd class="inline">
                                By default
                                <a class="text-[#425C82] font-semibold" 
                                   href="https://github.com/F1bonacc1/process-compose">process-compose</a>
                                is used to manage processes, giving you a simple
                                interface to inspect logs and restart processes (Ctrl+R).
                                <img class="mt-4 rounded-md shadow-sm" 
                                     src="/assets/images/process-compose.png" 
                                     alt="Process compose interface" />
                            </dd>
                        </div>
                    </dl>
                </div>
            </div>
        </div>
    </div>
</div>

<div class="overflow-hidden bg-white py-14">
    <div class="mx-auto max-w-7xl md:px-6 lg:px-8">
        <div class="grid grid-cols-1 gap-x-8 gap-y-16 sm:gap-y-20 lg:grid-cols-2 lg:items-start">
            <div class="px-4">
                <div class="mx-auto max-w-2xl lg:mx-0 lg:max-w-lg">
                    <h2 class="text-3xl font-bold tracking-tight text-gray-900 sm:text-4xl">
                        Run services
                    </h2>
                    <p class="mt-6 text-xl font-medium leading-8 text-gray-600">
                        <a class="text-[#425C82] font-semibold" href="/services">Choose from many community-maintained services</a>
                        like <strong>PostgreSQL, Redis, MySQL, RabbitMQ, WireMock,
                        MinIO, Caddy, ElasticSearch, OpenTelemetry
                        Collector, Prometheus</strong>, and
                        <a class="text-[#425C82] font-semibold" href="/services/#supported-services">more added regularly</a>.
                    </p>

                    <dl class="mt-10 max-w-xl space-y-8 text-base leading-7 text-gray-600 lg:max-w-none">
                        <div class="relative lg:pl-3">
                            <dt class="block font-semibold text-gray-900">
                                Pre-configured processes
                            </dt>
                            <dd class="inline">
                                Services define processes that start automatically when
                                enabled via <code class="bg-gray-100 p-1">devenv up</code>.
                            </dd>
                        </div>
                        <div class="relative lg:pl-3">
                            <dt class="block font-semibold text-gray-900">
                                Simple configuration
                            </dt>
                            <dd class="inline">
                                Each service provides various configuration options
                                and hooks to pass additional custom configuration.
                            </dd>
                        </div>
                        <div class="relative lg:pl-3">
                            <dt class="block font-semibold text-gray-900">
                                Extensible
                            </dt>
                            <dd class="inline">
                                Define your own development processes as services,
                                enabling simple reuse with minimal configuration.
                            </dd>
                        </div>
                    </dl>
                </div>
            </div>
            <div class="px-4 lg:px-0">
                <div class="relative isolate overflow-hidden rounded-md sm:mx-auto sm:max-w-2xl lg:mx-0 lg:max-w-none">
                    <div class="mx-auto max-w-2xl sm:mx-0 sm:max-w-none">
                        <div class="overflow-hidden bg-gray-900">
                            <div class="flex bg-gray-800/40">
                                <div class="flex items-center text-sm font-medium leading-6 border-b border-r border-b-white/20 border-r-white/10 bg-white/5 h-8">
                                    <div class="px-4 text-gray-200">
                                        devenv.nix
                                    </div>
                                </div>
                            </div>
                            <pre class="text-white text-sm"><code class="language-nix">{ pkgs, ... }: {
  services.postgres = {
    enable = true;
    package = pkgs.postgresql_15;
    initialDatabases = [{ name = "mydb"; }];
    extensions = extensions: [
      extensions.postgis
      extensions.timescaledb
    ];
    settings.shared_preload_libraries = "timescaledb";
    initialScript = "CREATE EXTENSION IF NOT EXISTS timescaledb;";
  };
}
</code></pre>
                        </div>
                    </div>

                    <div class="overflow-hidden bg-gray-900 border-t border-t-white/20">
                        <pre class="text-white text-sm"><code class="language-shell" data-shell-prefix="$">devenv up
...

</code></pre>
                    </div>
                </div>
            </div>
        </div>
    </div>
</div>

<div class="overflow-hidden bg-white py-14">
    <div class="mx-auto max-w-7xl md:px-6 lg:px-8">
        <div class="grid grid-cols-1 gap-x-8 gap-y-16 sm:gap-y-20 lg:grid-cols-2 lg:items-start">
            <div class="px-4 lg:px-0 order-last lg:order-first">
                <div class="relative isolate overflow-hidden rounded-md sm:mx-auto sm:max-w-2xl lg:mx-0 lg:max-w-none">
                    <div class="mx-auto max-w-2xl sm:mx-0 sm:max-w-none">
                        <div class="overflow-hidden bg-gray-900">
                            <div class="flex bg-gray-800/40">
                                <div class="flex items-center text-sm font-medium leading-6 border-b border-r border-b-white/20 border-r-white/10 bg-white/5 h-8">
                                    <div class="px-4 text-gray-200">
                                        devenv.nix
                                    </div>
                                </div>
                            </div>
                            <pre class="text-white text-sm"><code class="language-nix">{ pkgs, ... }: {
  packages = [
    pkgs.mkdocs
    pkgs.curl
  ];

  processes = {
    docs.exec = "mkdocs serve";
  };

  enterTest = ''
    wait_for_port 8000
    curl http://localhost:8000 | grep "Hello, world!"
  '';
}
</code></pre>
                        </div>
                    </div>

                    <div class="overflow-hidden bg-gray-900 border-t border-t-white/20">
                        <pre class="text-white text-sm"><code class="language-shell" data-shell-prefix="$">devenv test
...

</code></pre>
                    </div>
                </div>
            </div>

            <div class="px-4 order-first lg:order-last">
                <div class="mx-auto max-w-2xl lg:mx-0 lg:max-w-lg">
                    <h2 class="text-3xl font-bold tracking-tight text-gray-900 sm:text-4xl">
                        Run tests
                    </h2>
                    <p class="mt-6 text-xl font-medium leading-8 text-gray-600">
                        Running <a class="text-[#425C82] font-semibold" href="/tests">scripts in your environment with all processes active</a>
                        is as simple as <code class="bg-gray-100 p-1">devenv test</code>.
                    </p>

                    <dl class="mt-10 max-w-xl space-y-8 text-base leading-7 text-gray-600 lg:max-w-none">
                        <div class="relative lg:pl-3">
                            <dt class="block font-semibold text-gray-900">
                                Integrated testing
                            </dt>
                            <dd class="inline">
                                Execute your preferred language test runner or a
                                simple script to verify your environment.
                                <p class="mt-2">
                                    All process management is handled automatically,
                                    so you can focus on writing tests.
                                </p>
                            </dd>
                        </div>
                    </dl>
                </div>
            </div>
        </div>
    </div>
</div>

<div class="overflow-hidden bg-white py-14">
    <div class="mx-auto max-w-7xl md:px-6 lg:px-8">
        <div class="grid grid-cols-1 gap-x-8 gap-y-16 sm:gap-y-20 lg:grid-cols-2 lg:items-start">
            <div class="px-4">
                <div class="mx-auto max-w-2xl lg:mx-0 lg:max-w-lg">
                    <h2 class="text-3xl font-bold tracking-tight text-gray-900 sm:text-4xl">
                        Container interoperability
                    </h2>
                    <p class="mt-6 text-xl font-medium leading-8 text-gray-600">
                        <a href="/containers/" class="text-[#425C82] font-semibold">Generate containers</a>
                        from your development environment and build/copy/run them.
                    </p>

                    <dl class="mt-10 max-w-xl space-y-8 text-base leading-7 text-gray-600 lg:max-w-none">
                        <div class="relative lg:pl-3">
                            <dt class="block font-semibold text-gray-900">
                                Containerized environments
                            </dt>
                            <dd class="inline">
                                The <code class="bg-gray-100 p-1">shell</code> container 
                                lets you run your environment in a container.
                                <p class="mt-2">
                                    Use <code class="bg-gray-100 p-1">devenv container run shell</code>
                                    to enter your environment in a container.
                                </p>
                            </dd>
                        </div>
                        <div class="relative lg:pl-3">
                            <dt class="block font-semibold text-gray-900">
                                Containerized processes
                            </dt>
                            <dd class="inline">
                                The <code class="bg-gray-100 p-1">processes</code> container 
                                lets you run your processes in a container.
                                <p class="mt-2">
                                    Use <code class="bg-gray-100 p-1">devenv container run processes</code>
                                    to run your processes in a container.
                                </p>
                            </dd>
                        </div>
                        <div class="relative lg:pl-3">
                            <dt class="block font-semibold text-gray-900">
                                Custom containers
                            </dt>
                            <dd class="inline">
                                Define <code class="bg-gray-100 p-1">containers.mycontainer.*</code> to
                                <a href="/containers/#running-artifacts" class="text-[#425C82] font-semibold">customize your container</a>.
                            </dd>
                        </div>
                    </dl>
                </div>
            </div>
            <div class="px-4 lg:px-0">
                <div class="relative isolate overflow-hidden rounded-md sm:mx-auto sm:max-w-2xl lg:mx-0 lg:max-w-none">
                    <div class="mx-auto max-w-2xl sm:mx-0 sm:max-w-none">
                        <div class="overflow-hidden bg-gray-900">
                            <div class="flex bg-gray-800/40">
                                <div class="flex items-center text-sm font-medium leading-6 border-b border-r border-b-white/20 border-r-white/10 bg-white/5 h-8">
                                    <div class="px-4 text-gray-200">
                                        devenv.nix
                                    </div>
                                </div>
                            </div>
                            <pre class="text-white text-sm"><code class="language-nix">{ pkgs, ... }: {
  packages = [
    pkgs.mkdocs
    pkgs.curl
  ];

  processes = {
    docs.exec = "mkdocs serve";
  };
}
</code></pre>
                        </div>
                    </div>

                    <div class="overflow-hidden bg-gray-900 border-t border-t-white/20">
                        <pre class="text-white text-sm"><code class="language-shell" data-shell-prefix="$">devenv container build processes
...
</code><code class="language-shell" data-shell-prefix="$">devenv container copy processes
...
</code><code class="language-shell" data-shell-prefix="$">devenv container run processes
...

</code></pre>
                    </div>
                </div>
            </div>
        </div>
    </div>
</div>

<div class="overflow-hidden bg-white py-14">
    <div class="mx-auto max-w-7xl md:px-6 lg:px-8">
        <div class="grid grid-cols-1 gap-x-8 gap-y-16 sm:gap-y-20 lg:grid-cols-2 lg:items-start">
            <div class="px-4 lg:px-0 order-last lg:order-first">
                <div class="relative isolate overflow-hidden rounded-md sm:mx-auto sm:max-w-2xl lg:mx-0 lg:max-w-none">
                    <div class="mx-auto max-w-2xl sm:mx-0 sm:max-w-none">
                        <div class="overflow-hidden bg-gray-900">
                            <div class="flex bg-gray-800/40">
                                <div class="flex items-center text-sm font-medium leading-6 border-b border-r border-b-white/20 border-r-white/10 bg-white/5 h-8">
                                    <div class="px-4 text-gray-200">
                                        devenv.yaml
                                    </div>
                                </div>
                            </div>
                            <pre class="text-white text-sm"><code class="language-yaml">inputs:
  myorg-devenv:
    url: github:myorg/myorg-devenv
imports:
  - ./frontend
  - ./backend
  - myorg-devenv/service1
  - myorg-devenv/service2
</code></pre>
                        </div>
                    </div>
                </div>
            </div>

            <div class="px-4 order-first lg:order-last">
                <div class="mx-auto max-w-2xl lg:mx-0 lg:max-w-lg">
                    <h2 class="text-3xl font-bold tracking-tight text-gray-900 sm:text-4xl">
                        Poly/Mono repo composability
                    </h2>
                    <p class="mt-6 text-xl font-medium leading-8 text-gray-600">
                        <a class="text-[#425C82] font-semibold" href="/composing-using-imports/">Compose multiple environments</a>
                        into a single environment.
                    </p>

                    <dl class="mt-10 max-w-xl space-y-8 text-base leading-7 text-gray-600 lg:max-w-none">
                        <div class="relative lg:pl-3">
                            <dt class="block font-semibold text-gray-900">
                                Local imports
                            </dt>
                            <dd class="inline">
                                For monorepos, define environments per folder and import them 
                                to merge into a single unified environment.
                            </dd>
                        </div>
                        <div class="relative lg:pl-3">
                            <dt class="block font-semibold text-gray-900">
                                Remote imports
                            </dt>
                            <dd class="inline">
                                For polyrepos, define environments per repository and import them
                                to merge into a single unified environment.
                                <p class="mt-2">
                                    Start with a central repository containing shared configuration
                                    until your team is comfortable maintaining their own environments.
                                </p>
                            </dd>
                        </div>
                    </dl>
                </div>
            </div>
        </div>
    </div>
</div>

<div class="mx-auto text-center max-w-7xl py-8 md:px-6 lg:px-8">
    <a
        href="/getting-started/"
        class="rounded-md bg-[#425C82] px-6 py-3 text-lg font-semibold text-white shadow-md hover:bg-[#344968] transition-colors duration-200 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-indigo-400"
        >Get Started</a>
</div>
<div class="overflow-hidden bg-white py-14">
    <div class="mx-auto max-w-7xl md:px-6 lg:px-8">
        <div class="grid grid-cols-1 gap-x-8 gap-y-16 sm:gap-y-20 lg:grid-cols-2 lg:items-start">
            <div class="px-4">
                <div class="mx-auto max-w-2xl lg:mx-0 lg:max-w-lg">
                    <h2 class="text-3xl font-bold tracking-tight text-gray-900 sm:text-4xl">
                        Packaging using Nix
                    </h2>
                    <p class="mt-6 text-xl font-medium leading-8 text-gray-600">
                        Use the same interface for all languages for packaging applications.
                        <a class="text-[#425C82] font-semibold" href="/outputs/">Define outputs</a>
                        to build your applications.
                    </p>

                    <dl class="mt-10 max-w-xl space-y-8 text-base leading-7 text-gray-600 lg:max-w-none">
                        <div class="relative lg:pl-3">
                            <dt class="block font-semibold text-gray-900">
                                Best tools chosen for you
                            </dt>
                            <dd class="inline">
                                devenv evaluates and chooses the best packaging tools
                                (crate2nix for Rust, uv2nix for Python) so you don't have to.
                            </dd>
                        </div>
                        <div class="relative lg:pl-3">
                            <dt class="block font-semibold text-gray-900">
                                Language integration
                            </dt>
                            <dd class="inline">
                                Each language provides an <code class="bg-gray-100 p-1">import</code>
                                function to package your application using the best tools
                                for that ecosystem.
                            </dd>
                        </div>
                        <div class="relative lg:pl-3">
                            <dt class="block font-semibold text-gray-900">
                                Build outputs
                            </dt>
                            <dd class="inline">
                                Use <code class="bg-gray-100 p-1">devenv build</code> 
                                to build your application outputs for distribution.
                            </dd>
                        </div>
                        <div class="relative lg:pl-3">
                            <dt class="block font-semibold text-gray-900">
                                Distribution ready
                            </dt>
                            <dd class="inline">
                                Outputs are packaged as Nix derivations, making them
                                ready for distribution and deployment. Read more about
                                <a class="text-[#425C82] font-semibold"
                                   href="/blog/posts/closing-the-nix-gap-from-tools-to-packaged-applications/">closing the Nix gap</a>
                                from tools to packaged applications.
                            </dd>
                        </div>
                    </dl>
                </div>
            </div>
            <div class="px-4 lg:px-0">
                <div class="relative isolate overflow-hidden rounded-md sm:mx-auto sm:max-w-2xl lg:mx-0 lg:max-w-none">
                    <div class="mx-auto max-w-2xl sm:mx-0 sm:max-w-none">
                        <div class="overflow-hidden rounded-b-xl bg-gray-900">
                            <div class="flex bg-gray-800/40">
                                <div class="flex items-center text-sm font-medium leading-6 border-b border-r border-b-white/20 border-r-white/10 bg-white/5 h-8">
                                    <div class="px-4 text-gray-200">
                                        devenv.nix
                                    </div>
                                </div>
                            </div>
                            <pre class="text-white text-sm"><code class="language-nix">{ config, ... }: {
  # https://devenv.sh/languages
  languages = {
    rust.enable = true;
    python.enable = true;
  };

  # https://devenv.sh/outputs
  outputs = {
    rust-app = config.languages.rust.import ./rust-app {};
    python-app = config.languages.python.import ./python-app {};
  };
}
</code></pre>
                        </div>
                    </div>
                </div>
            </div>
        </div>
    </div>
</div>


</div>

{% endblock %}

<!-- Override content -->
{% block content %}{% endblock %}

<!-- Application footer -->
{% block footer %} {{ super() }} {% endblock %}
